iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
Modern Web

Ruby新手村的礦工日記系列 第 8

[ Day 08 ] Ruby 第一次聽到雜湊以為是吃的

  • 分享至 

  • xImage
  •  

是一個由keyvalue所組成的集合,型態長得像JS的物件或是python的字典,每一個key會對應到屬於他的value
所以當你使用Key便可以找到value

簡單來說就是一個蘿蔔一個坑。

keyvalueu指的又是什麼呢?下面將會告訴你。

Hash長怎樣?

hash的模樣有兩種:

  1. 箭頭式:
old_hash = {:product => "coffee", :price => 45}
  1. Ruby 1.9後,加入了類似JSON的格式
new_hash = {product: "coffee", price: 45}

但不管是哪一種,本質上都是一樣的,它只不過是個語法糖衣罷了。

p new_hash = {product: "coffee", price: 45}
# 印出 {:product=>"coffee", :price=>45}

開頭有提到keyvalue,以上面new_hash為例:
productprice稱為key;
"coffee"45為value。

你需要拿對鑰匙

當你使用置物櫃時,你會拿到一把屬於這格置物櫃的鑰匙。
你使用結束之後,你必須拿你剛剛拿到的鑰匙才能打開你置物櫃的門;不然,不管你鑰匙怎麼轉,門依舊無動於衷,因為它對應的鑰匙不是你手中的那一把。

Hash就像置物櫃的門,你需要正確的key才能拿到你想要的value

user = {name: "Kitty", age: 20, gender: "Female"}
p user["name"]    # => nil
p user[:name]     # => "Kitty"

:::warning
要注意,因為Hash中的key是符號:name而不是字串"name",這兩個是不一樣的東西,所以拿到的不是你想要的東西,這邊要特別注意。
至於符號symbol是什麼?下個單元會在專門介紹。
:::

關於操作Hash的小技巧

如果你想要知道hash中所有的key或value,可以透過使用keysvalues方法來印出:

user = {name: "Kitty", age: 20, gender: "Female"}

p user.keys      # => [:name, :age, :gender]
p user.values    # => ["Kitty", 20, "Female"]

但你改變主意了,你想要一個一個拿出來:

user.each do |element|
  p element
end

# 執行後的結果
# => [:name, "Kitty"]
# => [:age, 20]
# => [:gender, "Female"]

接著你又想個別取出:

user.each do |key, value|
  p key
  p value
end

# 執行後的結果
# => name
# => Kitty
# => age
# => 20
# => gender
# => Female

想要知道hash裡面有沒有我要的東西

coding到三更半夜,眼睛很酸以及身體又累,但是眼前的hash又很龐大,能不能用一段程式就可以讓我知道這個key有沒有在這個hash當中。
我們可以這樣判斷:

user = {name: "Kitty", age: 20, gender: "Female"}

p user.key?(:gender)      # => true
p user.key?(:address)     # => false

那value呢?

user = {name: "Kitty", age: 20, gender: "Female"}

p user.value?("Kitty")    # => true
p user.key?(40)           # => false

以上為雜湊Hash的基本介紹,更多的內容可以查閱Ruby的官方手冊

參考資料:

  1. 為你自己學 Ruby on Rails

上一篇
[Day 07 ] Ruby - 10種陣列操作的方法
下一篇
[ Day 09 ] Ruby 充滿了符號
系列文
Ruby新手村的礦工日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言